package thread;

/**
 * 线程等待
 */
public class TestDemo6 {
    public static void main1(String[] args) throws InterruptedException {
        Thread t = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                System.out.println("hello thread");
                try{
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        t.start();
        //join就是让main等待t执行完,此时main在阻塞状态
        //t.join();
        //但是总不能死等吧,所以join提供了另一个版本,可以设置一个最长等待时间
        t.join(10000);//超过10s,不等了
    }
}

/**
 * 最后讲一下休眠到底是在做什么?
 * 进程就是用双向链表将PCB串起来(Linux内核中不区分线程与进程)
 * 但是一个进程如果有多个线程,每个线程都有一个PCB
 * 每个PCB上有一个字段tgroupId,这个id就相当于进程的id,同一个进程中的若干个线程的id是相同的
 * 系统中会有就绪队列和阻塞队列,如果sleep执行后,这个PCB就会进入阻塞队列
 * 时间到了后就会回到了就绪队列
 */
